9-2 GlIk

MATLAB 的 interp2 指令可進行二維格子點內插,其使用語法如下:

zi = interp2(x, y, z, xi, yi, method)

其中 z 是一矩陣,代表一函數的高度,而矩陣 x 及 y 則是此函數在方格子點的 x 及 y 座標,矩陣 xi 及 yi 則是內插點的 x 及 y 座標,字串 method 則指定使用的內插法,有 4 種:

使用 interp2 時,x 及 y 都必須是嚴格遞增或遞減。一般情況下,x 及 y 都是由 meshgrid 所產生,以保證其格式的正確性。

用不同的方法進行二維內插,會得到不同的效果,以下我們使用曲面圖及等高線來顯示不同內插法所得到的不同結果:

Example 1: 09-內插法/interp201.m[x,y] = meshgrid(-3:1:3); % 產生 -3 至 3 的格子點 z = peaks(x,y); % 產生 peaks 曲面資料 [xi, yi] = meshgrid(-3:.25:3); % 生產內插點 zi1 = interp2(x, y, z, xi, yi, 'nearest'); zi2 = interp2(x, y, z, xi, yi, 'linear'); zi3 = interp2(x, y, z, xi, yi, 'cubic'); zi4 = interp2(x, y, z, xi, yi, 'spline'); subplot(2,3,1); surf(x, y, z); axis tight; title('Original'); subplot(2,3,3); surf(xi, yi, zi1); axis tight; title('Nearest'); subplot(2,3,4); surf(xi, yi, zi2); axis tight; title('Linear'); subplot(2,3,5); surf(xi, yi, zi3); axis tight; title('Cubic'); subplot(2,3,6); surf(xi, yi, zi4); axis tight; title('Spline'); % 以下畫出等高線 figure subplot(2,3,1); contour(x, y, z, 20); title('Original'); subplot(2,3,3); contour(xi, yi, zi1, 20); title('Nearest'); subplot(2,3,4); contour(xi, yi, zi2, 20); title('Linear'); subplot(2,3,5); contour(xi, yi, zi3, 20); title('Cubic'); subplot(2,3,6); contour(xi, yi, zi4, 20); title('Spline');

由上兩圖可看出,method = 'cubic' 產生的曲面較其它兩種方法('nearest' 及 'linear')為平滑。若使用 'spline' 也會產生平滑的曲面,這部分請讀者修改上述範例程式,自行試試看。


MATLAB程式設計:進階篇